<?php
namespace service;

use think\Exception;
use think\facade\App;
use Yansongda\Pay\Pay;

/**
 * 支付宝手机网站支付接入
 * Class AliPay
 * @package service
 */
class AliPay
{
    public $config = [
        'app_id' => '2018112862393122',
        'charset' => 'utf-8',
        'notify_url' => '',
        'return_url' => '',
        'ali_public_key' => '',
        // 加密方式： **RSA2**
        'private_key' => '',
        'log' => [ // optional
            'file' => './runtime/loginfo/paylog/alipay.log',
            'level' => 'debug', // 建议生产环境等级调整为 info，开发环境为 debug
            'type' => 'single', // optional, 可选 daily.
            'max_file' => 30, // optional, 当 type 为 daily 时有效，默认 30 天
        ],
        'http' => [
            'timeout' => 5.0,           //请求超时的秒数。使用0无限期的等待(默认行为)
            'connect_timeout' => 5.0,   //等待服务器响应超时的最大值
            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
        ],
//        'mode' => 'dev', // optional,设置此参数，将进入沙箱模式
    ];

    /**
     * AliPay constructor.
     * @param string $notify_url    支付成功回调页面
     * @param string $return_url    支付成功跳转页面
     */
    public function __construct($notify_url = '' , $return_url = '')
    {
        $this->config['ali_public_key'] = file_get_contents(App::getRootPath().'extend/service/ali_key/ali_public_key.pem');
        $this->config['private_key'] = file_get_contents(App::getRootPath().'extend/service/ali_key/rsa_private_key.pem');
        $this->config['notify_url'] = $notify_url?:env('api_host').'/ali/notify';
//        $this->config['return_url'] = $return_url?:env('api_host').'/ali/return_url';
    }

    /**
     * 支付宝支付接口
     * @param string $order_no  交易单号
     * @param int $money        交易总额
     * @param string $subject   商品名称
     * @return mixed
     */
    public function pay($order_no = '' , $money = 0 , $subject = '会员充值')
    {
        if($order_no == false || $money == 0) return false;

        $order = [
            'out_trade_no' => $order_no,
            'total_amount' => $money,
            'subject' => $subject,
            'product_code' => 'QUICK_WAP_WAY',
        ];
        $alipay = Pay::alipay($this->config)->wap($order);
        return $alipay->send();
    }

    public function return_url()
    {
        $data = Pay::alipay($this->config)->verify(); // 是的，验签就这么简单！
        // 订单号：$data->out_trade_no
        // 支付宝交易号：$data->trade_no
        // 订单总金额：$data->total_amount
    }

    /**
     * 支付宝支付接口
     * @param string $order_no  交易单号
     * @param int $money        交易总额
     * @param string $payee_account   收款账户
     * @return mixed
     */
    public function transfer($order_no = '' , $money = 0 , $payee_account = '')
    {
        if($order_no == false || $money == 0 || $payee_account == '') return false;

        $order = [
            'out_biz_no' => $order_no,
            'payee_type' => 'ALIPAY_LOGONID',
            'payee_account' => $payee_account,
//            'amount' => $money,
            'amount' => 0.1,
        ];
        $alipay = Pay::alipay($this->config)->transfer($order);
        return $alipay->toArray();
    }
}